package com.demo.java.OD101_150.OD106;

import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最长连续子序列，子序列长度】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145692891
 */
public class OdMain {
    public static void main(String[] args) {
        try {
            Scanner s = new Scanner(System.in);
            // 读取并解析输入数组
            String[] values = s.nextLine().split(",");
            List<Integer> numsList = Arrays.stream(values)
                    .map(Integer::parseInt)
                    .collect(Collectors.toList());
            int targetSum = Integer.parseInt(s.nextLine());  // 读取目标和

            int maxSize = -1;  // 初始化最长子数组长度为-1（默认值表示没有找到）

            // 用一个map来存储前缀和的出现位置
            int currentSum = 0;
            // 使用一个hashmap来记录当前前缀和及其最早出现的位置
            // Map<currentPrefixSum, index>
            // 例如: sum = 6，之前已经有一个子数组的和也是6，那就可以在这两个索引之间找到一个和为0的子数组
            java.util.Map<Integer, Integer> prefixSumMap = new java.util.HashMap<>();
            prefixSumMap.put(0, -1);  // 特殊情况，便于处理从第一个元素开始的子数组

            for (int i = 0; i < numsList.size(); i++) {
                currentSum += numsList.get(i);

                // 如果当前前缀和减去目标和的值存在，那么就找到了一个和为目标值的子数组
                if (prefixSumMap.containsKey(currentSum - targetSum)) {
                    // 获取前缀和的最早出现的位置
                    int startIndex = prefixSumMap.get(currentSum - targetSum);
                    int subarrayLength = i - startIndex;  // 当前子数组长度
                    maxSize = Math.max(maxSize, subarrayLength);  // 更新最大长度
                }

                // 如果当前前缀和没有出现过，则记录其第一次出现的索引
                prefixSumMap.putIfAbsent(currentSum, i);
            }

            // 输出结果
            System.out.println(maxSize == -1 ? -1 : maxSize);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("input error");
        }
    }
}